#include "stdio.h"
#include"stdlib.h"
#define max 100
typedef struct NodeType
{
int id;
int password;
struct NodeType *next;
}NodeType;
NodeType *getnode(int iId,int ipassword)
{
NodeType *pnew=NULL;
pnew=(NodeType *)malloc(sizeof(NodeType));
if(!pnew)
{
printf("ERROR");
exit (-1);
}
pnew->id=iId;
pnew->password=ipassword;
pnew->next=NULL;
return pnew;
}
void crealist (NodeType **pphead,int n)//建立循环列表。
{
int i=0;
int ipassword=0;
NodeType *pnew=NULL;
NodeType *pcur=NULL;
for(i=1;i<=n;i++)
{
scanf("%d",&ipassword); // 输入第个人的密码
pnew=getnode(i,ipassword);//调用函数
if(*pphead==NULL)
{
*pphead=pcur=pnew;
pcur->next=*pphead;
}
else
{
pnew->next=pcur->next;
pcur->next=pnew;
pcur=pnew;
}
}// 完成单向链表的创建
}
void JosephsOperate(NodeType **pphead,int m)
{
int icounter=0;
int iflag=1;
NodeType *p1=NULL;
NodeType *p2=NULL;
NodeType *p3=NULL;
p1=p2=*pphead;
while (p1->next!=*pphead)
p1=p1->next;
while(iflag)
{
for(icounter=1;icounter<m;icounter++)
{
p1=p2;
p2=p2->next;
}
if(p1==p2)
iflag=0;
p3=p2;
p1->next=p2->next;
p2=p2->next;
m=p3->password;
printf("%d ",p3->id);
free(p3);
}
*pphead=NULL;
}
int main (void)
{
int n=0;
int m=0;
NodeType *phead=NULL;
scanf("%d",&n);//输入的人数。
scanf("%d",&m);//初始密码
crealist (&phead,n);
JosephsOperate(&phead,m);
return 1;
}